package com.ffzl.cloud.utils;

import android.util.Log;

import com.ffzl.cloud.BuildConfig;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;




/**
 * log 日志打印
 */
public class XLog {
    private XLog() {
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    private static final String TAG = "默认LOG日志信息=======>>";

    private static boolean isDebug() {
        return BuildConfig.DEBUG;
    }

    /**
     * Android打印方法路径
     */
    public static void printMethodPath() {
        //new 一个异常类
        Exception exception = new Exception();
        //调用者上级类名
        Log.i(TAG, "Class0———>：" + exception.getStackTrace()[0].getClassName());
        //调用者上级的上级类名
        Log.i(TAG, "Class1———>：" + exception.getStackTrace()[1].getClassName());
        //调用者上级的方法名
        Log.i(TAG, "MethodName0———>：" + exception.getStackTrace()[0].getMethodName());
        //调用者上级的上级方法名
        Log.i(TAG, "MethodName1———>：" + exception.getStackTrace()[1].getMethodName());
        //当前方法行号
        Log.i(TAG, "line0———>：" + exception.getStackTrace()[0].getLineNumber());
        //调用方法行号
        Log.i(TAG, "line1———>：" + exception.getStackTrace()[1].getLineNumber());
    }

    // 下面四个是默认tag的函数
    public static void i(String msg) {
        if (isDebug())
            if (TAG == null || TAG.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 长度小于等于限制直接打印
            Log.i(TAG, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.i(TAG, logContent);
            }
            Log.i(TAG, msg);// 打印剩余日志
        }
    }

    public static void d(String msg) {
        if (isDebug())
            if (TAG == null || TAG.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize) {// 长度小于等于限制直接打印
            Log.d(TAG, msg);

        } else {
            while (msg.length() > segmentSize) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize);
                msg = msg.replace(logContent, "");
                Log.d(TAG, logContent);
            }
            Log.d(TAG, msg);// 打印剩余日志
        }
    }

    public static void e(String msg) {
        if (isDebug())
            if (TAG == null || TAG.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 长度小于等于限制直接打印
            Log.e(TAG, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.e(TAG, logContent);
            }
            Log.e(TAG, msg);// 打印剩余日志
        }
    }

    public static void w( String msg) {
        if (isDebug())
            if (TAG == null || TAG.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize) {// 长度小于等于限制直接打印
            Log.w(TAG, msg);

        } else {
            while (msg.length() > segmentSize) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize);
                msg = msg.replace(logContent, "");
                Log.w(TAG, logContent);
            }
            Log.w(TAG, msg);// 打印剩余日志
        }

    }

    public static void v(String msg) {
        if (isDebug())
            if (TAG == null || TAG.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 长度小于等于限制直接打印
            Log.e(TAG, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.e(TAG, logContent);
            }
            Log.e(TAG, msg);// 打印剩余日志
        }
    }

    // 下面是传入自定义tag的函数
    public static void i(String tag, String msg) {
        if (isDebug())
            if (tag == null || tag.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 长度小于等于限制直接打印
            Log.i(tag, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.i(tag, logContent);
            }
            Log.i(tag, msg);// 打印剩余日志
        }
    }

    public static void d(String tag, String msg) {
        if (isDebug())
            if (tag == null || tag.length() == 0
                    || msg == null || msg.length() == 0)
                return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize) {// 长度小于等于限制直接打印
            Log.d(tag, msg);

        } else {
            while (msg.length() > segmentSize) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize);
                msg = msg.replace(logContent, "");
                Log.d(tag, logContent);
            }
            Log.d(tag, msg);// 打印剩余日志
        }

    }

    public static void e(String tag, String msg) {
        if (isDebug())
                if (tag == null || tag.length() == 0
                        || msg == null || msg.length() == 0)
                    return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 长度小于等于限制直接打印
            Log.e(tag, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.e(tag, logContent);
            }
            Log.e(tag, msg);// 打印剩余日志
        }

    }

    public static void w(String tag, String msg) {
        if (isDebug())
                if (tag == null || tag.length() == 0
                        || msg == null || msg.length() == 0)
                    return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize) {// 长度小于等于限制直接打印
            Log.w(tag, msg);

        } else {
            while (msg.length() > segmentSize) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize);
                msg = msg.replace(logContent, "");
                Log.w(tag, logContent);
            }
            Log.w(tag, msg);// 打印剩余日志
        }

    }

    public static void v(String tag, String msg) {
        if (isDebug())
                if (tag == null || tag.length() == 0
                        || msg == null || msg.length() == 0)
                    return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize) {// 长度小于等于限制直接打印
            Log.v(tag, msg);

        } else {
            while (msg.length() > segmentSize) {// 循环分段打印日志
                String logContent = msg.substring(0, segmentSize);
                msg = msg.replace(logContent, "");
                Log.v(tag, logContent);
            }
            Log.v(tag, msg);// 打印剩余日志
        }
    }


    public static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void printLine(String tag, boolean isTop) {
        if (isTop) {
            Log.d(tag, "╔═══════════════════════════════════════════════════════════════════════════════════════");
        } else {
            Log.d(tag, "╚═══════════════════════════════════════════════════════════════════════════════════════");
        }
    }
    public static void printJson(String tag, String msg, String headString) {

        String message;

        try {
            if (msg.startsWith("{")) {
                JSONObject jsonObject = new JSONObject(msg);
                message = jsonObject.toString(4);//最重要的方法，就一行，返回格式化的json字符串，其中的数字4是缩进字符数
            } else if (msg.startsWith("[")) {
                JSONArray jsonArray = new JSONArray(msg);
                message = jsonArray.toString(4);
            } else {
                message = msg;
            }
        } catch (JSONException e) {
            message = msg;
        }

        printLine(tag, true);
        message = headString + LINE_SEPARATOR + message;
        String[] lines = message.split(LINE_SEPARATOR);
        for (String line : lines) {
            Log.d(tag, "║ " + line);
        }
        printLine(tag, false);
    }


}
